package com.san.metadata.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.san.base.dao.BaseDao;
import com.san.common.utils.Query;
import com.san.metadata.domain.ColumnDTO;
import com.san.metadata.domain.TableDTO;
import com.san.metadata.domain.TechnicalColumnsDO;
import com.san.metadata.domain.TechnicalTableDO;
import com.san.metadata.vo.TechnicalColumnsVO;

/**
 * 技术元数据数据访问接口
 * 
 * @author hulp
 *
 */
@Mapper
public interface TechnicalMetadataDao extends BaseDao {

	/**
	 * 查询技术元数据表
	 * 
	 * @param query
	 * @return
	 * @throws Exception
	 */
	List<TechnicalTableDO> list(Query query) throws Exception;

	/**
	 * 根据导入类型获取技术元数据表
	 * 
	 * @param query
	 * @return
	 */
	List<TechnicalTableDO> allTechnicalTable(Query query) throws Exception;

	/**
	 * 获取所有技术元数据表
	 * 
	 * @return
	 * @throws Exception
	 */
	List<TableDTO> listTable() throws Exception;

	/**
	 * 获取技术元数据表字段
	 * 
	 * @param tableId 技术元数据表ID
	 * @return
	 * @throws Exception
	 */
	List<ColumnDTO> listColumns(Long tableId) throws Exception;

	/**
	 * 获取指定技术元数据表字段
	 * 
	 * @param tableId 技术元数据表ID
	 * @return
	 * @throws Exception
	 */
	List<TechnicalColumnsDO> allTechnicalColumns(Long tableId) throws Exception;

	/**
	 * 查询技术元数据总数
	 * 
	 * @param query
	 * @return
	 * @throws Exception
	 */
	int count(Query query) throws Exception;

	/**
	 * 保存技术元数据
	 * 
	 * @param technicalTableDO
	 * @return
	 * @throws Exception
	 */
	int save(TechnicalTableDO technicalTableDO) throws Exception;

	/**
	 * 获取技术元数据表
	 * 
	 * @param tableId 技术元数据表ID
	 * @return
	 * @throws Exception
	 */
	TechnicalTableDO getById(Long tableId);

	/**
	 * 编辑技术元数据
	 * 
	 * @param technicalTableDO
	 * @return
	 * @throws Exception
	 */
	int doEdit(TechnicalTableDO technicalTableDO) throws Exception;

	/**
	 * 保存字段信息
	 * 
	 * @param technicalColumnsVO
	 * @return
	 * @throws Exception
	 */
	int saveColumn(TechnicalColumnsVO technicalColumnsVO);

	/**
	 * 删除技术元数据
	 * 
	 * @param tableId 技术元数据表ID
	 * @return
	 */
	int remove(Long tableId);

	/**
	 * 批量删除技术元数据
	 * 
	 * @param tableIds 技术元数据表ID集合
	 * @return
	 */
	int batchRemove(Long[] tableIds);

	/**
	 * 批量修改技术元数据字段标记
	 * 
	 * @param technicalColumnsVOList 技术元数据字段信息集合
	 * @return
	 */
	int batchColumnsUpdate(List<TechnicalColumnsVO> technicalColumnsVOList);

}
